.file "limit_define_x86_64.c"
.text
.section .rodata
.LC0:
    .string "Some number limits for this system:"
.LC1:
        .string "Biggest int: %d\n"
.LC2:
        .string "Smallest long long: %lld\n"
.LC3:
        .string "One byte = %d bits on this system.\n"
.LC5:
        .string "Largest double: %e\n"
.LC7:
        .string "Smallest normal float: %e\n"
.LC8:
        .string "float precision = %d digits\n"
.LC10:
        .string "float epsilon = %e\n"

.section .rodata
.align 8
.LC4:
        .long   -1
        .long   2146435071
.LC6:
        .long   0
        .long   940572672
.LC9:
        .long   0
        .long   1048576000

.text
.globl main
.type main, @function
main:
    pushq %rbp
    movq %rsp, %rbp
    movq $.LC0, %rdi
    call puts

    // 省略整数输出
    movq .LC4(%rip), %rax
    movq %rax, %xmm0
    movq $.LC5, %rdi
    movl $1, %eax
    call printf

    movq .LC6(%rip), %rax
    movq %rax, %xmm0
    movq $.LC7, %rdi
    movl $1, %eax
    call printf

    movq .LC9(%rip), %rax
    movq %rax, %xmm0
    movq $.LC10, %rdi
    movl $1, %eax
    call printf

    movl $0, %eax
    leave
    ret